﻿/**
* Скрипт отображающий статистическую информацию
*/
var container = Ext.getCmp(sectionId);
Ext.onReady(function () {
    var categoriesTree = {
        xtype: 'treepanel',
        frame: false,
        height: 400,
        rootVisible: true,
        id: 'categoriesTree',
        autoScroll: true,
        animate: true,
        loader: new Ext.tree.TreeLoader({
            url: '/ControlPanel/ManageCategories/GetCategories'
        }),
        root: new Ext.tree.AsyncTreeNode({
            id: -1,
            text: 'Корень',
            expanded: true
        }),
        tbar: [
            {
                text: 'Добавить',
                tooltip: 'Отображает диалог добавления новой категории',
                handler: function() {
                    showCategoryDialog();
                }
            },
            {
                text: 'Редактировать',
                tooltip: 'Отображает диалог редактирования выбранной категории',
                handler: function() {
                    var selectedNode = Ext.getCmp('categoriesTree').getSelectionModel().getSelectedNode();
                    if (selectedNode != null && selectedNode.id != -1)
                    {
                        showCategoryDialog(selectedNode.attributes.category);
                    }
                }
            },
            {
                text: 'Удалить',
                tooltip: 'Удаляет категорию и все ее дочерние категории',
                handler: function() {
                    var selectedNode = Ext.getCmp('categoriesTree').getSelectionModel().getSelectedNode();
                    if (selectedNode == null || selectedNode.id == -1){
                        return;
                    }
                    Ext.Msg.show({
                        title: 'Удаление категории',
                        msg: 'Вы действительно хотите удалить выбранную категорию и все вложенные в нее подкатегории?',
                        buttons: Ext.Msg.YESNO,
                        icon: Ext.Msg.QUESTION,
                        fn: function(txt){
                            if (txt == "yes"){
                                var id = selectedNode.id;
                                Ext.getCmp('categoriesTree').el.mask("Идет удаление категории","x-mask-loading");
                                Ext.Ajax.request({
                                    url: '/ControlPanel/ManageCategories/Delete',
                                    params: {id: id},
                                    success: function(response,request){
                                        var data = Ext.util.JSON.decode(response.responseText);
                                        Ext.getCmp('categoriesTree').el.unmask();
                                        if (data.result == "success"){
                                            selectedNode.remove();
                                        } else if (data.result == "errors"){
                                            Ext.Msg.alert('Ошибка на сервере',data.message);
                                        }
                                    },
                                    failure: function(response,request){
                                        Ext.getCmp('categoriesTree').el.unmask();
                                        var data = Ext.util.JSON.decode(response.responseText);
                                        Ext.Msg.alert('Ошибка','В ходе выполнения AJAX запроса возникла ошибка: '+data.message);
                                    },
                                    method: 'POST'
                                });
                            }
                        }
                    });
                }
            }
        ],
        enableDD: true,
        listeners: {
            dblclick: function(node,e){
                if (node.id != -1){
                    showCategoryDialog(node.attributes.category);
                }
            },
            movenode: function(tree,node,oldParent,newParent,index){
                if (oldParent.id != newParent.id){
                    Ext.getCmp('categoriesTree').el.mask("Идет перемещение категории","x-mask-loading");
                    Ext.Ajax.request({
                       url: '/ControlPanel/ManageCategories/Move',
                       params: {id: node.id,newParentId: newParent.id, index: index},
                       success: function(response,request){
                           var data = Ext.util.JSON.decode(response.responseText);
                           Ext.getCmp('categoriesTree').el.unmask();
                           if (data.result == "success"){
                               node.attributes.category.parentId = newParent.id;
                           } else if (data.result == "errors"){
                               Ext.Msg.alert('Ошибка на сервере',data.message);
                           }
                       },
                       failure: function(response,request){
                           var data = Ext.util.JSON.decode(response.responseText);
                           Ext.Msg.alert('Ошибка','В ходе выполнения AJAX запроса возникла ошибка: '+data.message);
                       },
                       method: 'POST'
                    });
                }
            }
        }
    };


    container.add(categoriesTree);
    container.doLayout();

    /**
     * Отображает диалог создания или редактирования категории
     * @param category - идентификатор категории, для новой = -1
     */
    function showCategoryDialog(category){
        var wnd = new Ext.Window({
            title: category != undefined ? "Редактирование категории "+category.displayName : "Новая категория",
            resizable: false,
            width: 235,
            items: [
                {
                    xtype: 'form',
                    name: 'categoryForm',
                    id: 'categoryForm',
                    labelAlign: 'top',
                    bodyStyle: 'padding: 5px',
                    items: [
                        {
                            xtype: 'hidden',
                            id: 'categoryIdField',
                            value: category != undefined ? category.id: -1
                        },
                        {
                            xtype: 'textfield',
                            fieldLabel: 'Отображаемое имя',
                            allowBlank: false,
                            id: 'categoryDisplayNameField',
                            value: category != undefined ? category.displayName : "",
                            width: 200,
                            anchor: '100%'
                        },
                        {
                            xtype: 'textfield',
                            fieldLabel: 'Системное имя',
                            allowBlank: false,
                            id: 'categorySystemNameField',
                            value: category != undefined ? category.systemName : "",
                            width: 200,
                            anchor: '100%'
                        },
                        {
                            xtype: 'textarea',
                            fieldLabel: 'Описание',
                            allowBlank: true,
                            id: 'categoryDescriptionField',
                            value: category != null ? category.description : "",
                            height: 150,
                            width: 200,
                            anchor: '100%'
                        },
                        {
                            xtype: 'checkbox',
                            boxLabel: 'Скрыта',
                            checked: category != null ? category.hidden : false,
                            id: 'categoryHiddenField'
                        }
                    ]
                }
            ],
            buttons: [
                {
                    text: 'Сохранить',
                    handler: function(){
                        // Валидация формы
                        if (!Ext.getCmp('categoryForm').getForm().isValid()){
                            Ext.Msg.alert('Ошибка заполнение формы','Пожалуйста, правильно заполните форму');
                            return;
                        }
                        // подготавливаем данные к отправке
                        var selectedNode = Ext.getCmp('categoriesTree').getSelectionModel().getSelectedNode();
                        var parentId = selectedNode != null ? selectedNode.id : -1;
                        var params = {
                            id: Ext.getCmp('categoryIdField').getValue(),
                            parentId: parentId,
                            displayName: Ext.getCmp('categoryDisplayNameField').getValue(),
                            systemName: Ext.getCmp('categorySystemNameField').getValue(),
                            description: Ext.getCmp('categoryDescriptionField').getValue(),
                            hidden: Ext.getCmp('categoryHiddenField').getValue()
                        };

                        // Отправляем данные
                        Ext.getCmp('categoriesTree').el.mask("Идет сохранение элемента","x-mask-loading");
                        Ext.Ajax.request({
                            url: '/ControlPanel/ManageCategories/Save',
                            params: params,
                            success: function(response,request){
                                var data = Ext.util.JSON.decode(response.responseText);
                                Ext.getCmp('categoriesTree').el.unmask();
                                if (data.result == "success"){

                                    wnd.close();
                                    // Добавляем данные в дерево либо обновляем изменившиеся данные
                                    if (category == undefined){
                                        // Создаем новый узел
                                        var parentNode = selectedNode != null ? selectedNode : Ext.getCmp('categoriesTree').root;
                                        var node = {
                                            id: data.data.id,
                                            text: params.displayName,
                                            qtip: params.description,
                                            leaf: true,
                                            category: params
                                        };
                                        parentNode.appendChild(node);
                                        parentNode.leaf = false;
                                    }
                                    else
                                    {
                                        // Обновляем изменения в существующем узле
                                        selectedNode.setText(params.displayName);
                                        selectedNode.setTooltip(params.description);
                                        selectedNode.attributes.category = params;
                                    }
                                } else if (data.result == "errors"){
                                    Ext.Msg.alert('Ошибка на сервере',data.message);
                                }
                            },
                            failure: function(response,request){
                                Ext.getCmp('categoriesTree').el.unmask();
                                var data = Ext.util.JSON.decode(response.responseText);
                                Ext.Msg.alert('Ошибка','В ходе выполнения AJAX запроса возникла ошибка: '+data.message);
                            },
                            method: 'POST'
                        });
                    }
                },
                {
                    text: 'Отмена',
                    handler: function(){
                        wnd.close();
                    }
                }
            ]
            
        });
        wnd.show();
    }
});